package com.nageoffer.shortlink.admin.common.convention.errorcode;

/**
 * 基础错误码定义
 * 这是一个枚举类，定义了平台中常见的错误码及其对应的错误信息。
 * 枚举值中包括了客户端错误、用户注册错误、幂等性Token错误、系统错误等不同类型的错误。
 */
public enum BaseErrorCode implements IErrorCode {

    // ========== 一级宏观错误码 客户端错误 ==========
    CLIENT_ERROR("A000001", "用户端错误"),  // 定义客户端错误码及信息

    // ========== 二级宏观错误码 用户注册错误 ==========
    USER_REGISTER_ERROR("A000100", "用户注册错误"),  // 用户注册失败
    USER_NAME_VERIFY_ERROR("A000110", "用户名校验失败"),  // 用户名校验失败
    USER_NAME_EXIST_ERROR("A000111", "用户名已存在"),  // 用户名已被注册
    USER_NAME_SENSITIVE_ERROR("A000112", "用户名包含敏感词"),  // 用户名包含敏感词
    USER_NAME_SPECIAL_CHARACTER_ERROR("A000113", "用户名包含特殊字符"),  // 用户名包含特殊字符
    PASSWORD_VERIFY_ERROR("A000120", "密码校验失败"),  // 密码校验失败
    PASSWORD_SHORT_ERROR("A000121", "密码长度不够"),  // 密码太短
    PHONE_VERIFY_ERROR("A000151", "手机格式校验失败"),  // 手机号码格式不正确

    // ========== 二级宏观错误码 系统请求缺少幂等Token ==========
    IDEMPOTENT_TOKEN_NULL_ERROR("A000200", "幂等Token为空"),  // 幂等Token为空
    IDEMPOTENT_TOKEN_DELETE_ERROR("A000201", "幂等Token已被使用或失效"),  // 幂等Token已失效

    // ========== 一级宏观错误码 系统执行出错 ==========
    SERVICE_ERROR("B000001", "系统执行出错"),  // 系统执行过程中出现错误

    // ========== 二级宏观错误码 系统执行超时 ==========
    SERVICE_TIMEOUT_ERROR("B000100", "系统执行超时"),  // 系统执行超时

    // ========== 一级宏观错误码 调用第三方服务出错 ==========
    REMOTE_ERROR("C000001", "调用第三方服务出错");  // 调用外部服务失败

    private final String code;  // 错误码
    private final String message;  // 错误信息

    /**
     * 构造函数，初始化错误码和错误信息
     */
    BaseErrorCode(String code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 获取错误码
     */
    @Override
    public String code() {
        return code;
    }

    /**
     * 获取错误信息
     */
    @Override
    public String message() {
        return message;
    }
}
